package com.sy.service.impl;

import com.sy.config.RedisKeyConfig;
import com.sy.dao.CouponDao;
import com.sy.dao.CouponTemplateDao;
import com.sy.entity.Coupon;
import com.sy.entity.CouponTemplate;
import com.sy.service.intf.CouponService;
import com.sy.third.JedisUtil;
import com.sy.util.DateUtil;
import com.sy.util.NumRandomUtil;
import com.sy.util.TokenUtil;
import com.sy.vo.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @description: 码起 自动生成代码
 * @author: 小毛
 * @create: 2020-11-30 11:42:53
 */
@Service
public class CouponServiceImpl implements CouponService {

    @Autowired
    private CouponDao couponDao;
    @Autowired
    private CouponTemplateDao couponTemplateDao;

    @Override
    public R save(Coupon coupon) {
        if (couponDao.insert(coupon) > 0) {
            return R.ok();
        } else {
            return R.fail("新增失败");
        }
    }

    @Override
    public R delById(int id) {
        if (couponDao.deleteById(id) > 0) {
            return R.ok();
        } else {
            return R.fail("删除失败");
        }
    }

    @Override
    public R all() {
        return R.ok(couponDao.all());
    }

    @Override
    public R create(CouponTemplate couponTemplate) {
        if (null != couponTemplate) {
            //优惠券码集合
            ArrayList<String> codes = new ArrayList<>(couponTemplate.getCoupon_count());
            //头部
            String date = new SimpleDateFormat("yy-MM-dd").format(new Date());
            //尾部
            for (int i = 0; i < couponTemplate.getCoupon_count(); i++) {
                //后八位
                int suffix8 = NumRandomUtil.randomNum(8);
                codes.add(date + suffix8);
            }
            String[] arr = new String[codes.size()];
            codes.toArray(arr);
            //这个就是 redis key
            String redisKey = RedisKeyConfig.CP_TP + couponTemplate.getId();
            //将模板id和优惠券码保存在 redis 队列中
            JedisUtil.getInstance().addSet(redisKey, arr);
//            //设置
//            JedisUtil.getInstance().setTime(redisKey, RedisKeyConfig.CP_ALIVETIME);

            //改变模板为可用状态
            couponTemplate.setAvailable(1);
            //将模板信息更新到数据库
            couponTemplateDao.updateById(couponTemplate.getId(), couponTemplate.getAvailable());
            return R.ok();
        }
        return R.fail();
    }

    @Override
    public R findAvailableTemplate(String token) {
        if (null != token) {
            //获取当前用户
            int uid = TokenUtil.getUid(token);
            //获取所有模板
            List<CouponTemplate> list = couponTemplateDao.all();
            //筛选模板
            ArrayList<Integer> ints = new ArrayList<>();
            //过滤过期优惠券
            list.stream().filter(t ->
                    DateUtil.dateDays(t.getExpired_time(), new Date()) > 0
            );
            //过滤同类型优惠券
            List<Coupon> coupons = couponDao.selectByuId(uid);
            list.removeAll(coupons);
            //过滤不符合用户什么的优惠券， 不过滤诱导消费


        }

        return null;
    }
}
